home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / wink24h / src_h / vram.asm < prev    next >
Encoding:
Assembly Source File  |  1994-06-01  |  10.9 KB  |  546 lines

  1. .386p
  2. DMAX_X    equ    128
  3. extrn    MAX_SCR:DWORD
  4. extrn    ReWrt_flg:WORD
  5. extrn    dmy_vram:DWORD
  6. extrn    vramSeg:DWORD
  7. extrn    vramOffset:DWORD
  8. extrn    locate:NEAR
  9. extrn    wrtkan:NEAR
  10. extrn    wrtank:NEAR
  11. ;*****************************************************************
  12. ;
  13. ;void    wrtank(ch,x,y,ccol,bcol,off)
  14. ;
  15. ;void    wrtkanji(ch,x,y,ccol,bcol,off)
  16. ;
  17. ;*****************************************************************
  18. v_para    struc
  19. v_ebp    dd    ?
  20. v_pcr    dd    ?
  21. v_ch    dd    ?
  22. v_x    dd    ?
  23. v_y    dd    ?
  24. v_ccol    dd    ?
  25. v_bcol    dd    ?
  26. v_off    dd    ?
  27. v_para    ends
  28. ;*************************************
  29. ;    VRAM Direct Access Program
  30. ;*************************************
  31. bitptn    segment    'DATA'
  32. colptn: 
  33.     dd    000000000h,099999999h,0AAAAAAAAh,0BBBBBBBBh
  34.     dd    0CCCCCCCCh,0DDDDDDDDh,0EEEEEEEEh,0FFFFFFFFh
  35.     dd    088888888h,011111111h,022222222h,033333333h
  36.     dd    044444444h,055555555h,066666666h,077777777h
  37. fntptn:    
  38.     dd    000000000h,0F0000000h,00F000000h,0FF000000h
  39.     dd    000F00000h,0F0F00000h,00FF00000h,0FFF00000h
  40.     dd    0000F0000h,0F00F0000h,00F0F0000h,0FF0F0000h
  41.     dd    000FF0000h,0F0FF0000h,00FFF0000h,0FFFF0000h
  42.     dd    00000F000h,0F000F000h,00F00F000h,0FF00F000h
  43.     dd    000F0F000h,0F0F0F000h,00FF0F000h,0FFF0F000h
  44.     dd    0000FF000h,0F00FF000h,00F0FF000h,0FF0FF000h
  45.     dd    000FFF000h,0F0FFF000h,00FFFF000h,0FFFFF000h
  46.     dd    000000F00h,0F0000F00h,00F000F00h,0FF000F00h
  47.     dd    000F00F00h,0F0F00F00h,00FF00F00h,0FFF00F00h
  48.     dd    0000F0F00h,0F00F0F00h,00F0F0F00h,0FF0F0F00h
  49.     dd    000FF0F00h,0F0FF0F00h,00FFF0F00h,0FFFF0F00h
  50.     dd    00000FF00h,0F000FF00h,00F00FF00h,0FF00FF00h
  51.     dd    000F0FF00h,0F0F0FF00h,00FF0FF00h,0FFF0FF00h
  52.     dd    0000FFF00h,0F00FFF00h,00F0FFF00h,0FF0FFF00h
  53.     dd    000FFFF00h,0F0FFFF00h,00FFFFF00h,0FFFFFF00h
  54.     dd    0000000F0h,0F00000F0h,00F0000F0h,0FF0000F0h
  55.     dd    000F000F0h,0F0F000F0h,00FF000F0h,0FFF000F0h
  56.     dd    0000F00F0h,0F00F00F0h,00F0F00F0h,0FF0F00F0h
  57.     dd    000FF00F0h,0F0FF00F0h,00FFF00F0h,0FFFF00F0h
  58.     dd    00000F0F0h,0F000F0F0h,00F00F0F0h,0FF00F0F0h
  59.     dd    000F0F0F0h,0F0F0F0F0h,00FF0F0F0h,0FFF0F0F0h
  60.     dd    0000FF0F0h,0F00FF0F0h,00F0FF0F0h,0FF0FF0F0h
  61.     dd    000FFF0F0h,0F0FFF0F0h,00FFFF0F0h,0FFFFF0F0h
  62.     dd    000000FF0h,0F0000FF0h,00F000FF0h,0FF000FF0h
  63.     dd    000F00FF0h,0F0F00FF0h,00FF00FF0h,0FFF00FF0h
  64.     dd    0000F0FF0h,0F00F0FF0h,00F0F0FF0h,0FF0F0FF0h
  65.     dd    000FF0FF0h,0F0FF0FF0h,00FFF0FF0h,0FFFF0FF0h
  66.     dd    00000FFF0h,0F000FFF0h,00F00FFF0h,0FF00FFF0h
  67.     dd    000F0FFF0h,0F0F0FFF0h,00FF0FFF0h,0FFF0FFF0h
  68.     dd    0000FFFF0h,0F00FFFF0h,00F0FFFF0h,0FF0FFFF0h
  69.     dd    000FFFFF0h,0F0FFFFF0h,00FFFFFF0h,0FFFFFFF0h
  70.     dd    00000000Fh,0F000000Fh,00F00000Fh,0FF00000Fh
  71.     dd    000F0000Fh,0F0F0000Fh,00FF0000Fh,0FFF0000Fh
  72.     dd    0000F000Fh,0F00F000Fh,00F0F000Fh,0FF0F000Fh
  73.     dd    000FF000Fh,0F0FF000Fh,00FFF000Fh,0FFFF000Fh
  74.     dd    00000F00Fh,0F000F00Fh,00F00F00Fh,0FF00F00Fh
  75.     dd    000F0F00Fh,0F0F0F00Fh,00FF0F00Fh,0FFF0F00Fh
  76.     dd    0000FF00Fh,0F00FF00Fh,00F0FF00Fh,0FF0FF00Fh
  77.     dd    000FFF00Fh,0F0FFF00Fh,00FFFF00Fh,0FFFFF00Fh
  78.     dd    000000F0Fh,0F0000F0Fh,00F000F0Fh,0FF000F0Fh
  79.     dd    000F00F0Fh,0F0F00F0Fh,00FF00F0Fh,0FFF00F0Fh
  80.     dd    0000F0F0Fh,0F00F0F0Fh,00F0F0F0Fh,0FF0F0F0Fh
  81.     dd    000FF0F0Fh,0F0FF0F0Fh,00FFF0F0Fh,0FFFF0F0Fh
  82.     dd    00000FF0Fh,0F000FF0Fh,00F00FF0Fh,0FF00FF0Fh
  83.     dd    000F0FF0Fh,0F0F0FF0Fh,00FF0FF0Fh,0FFF0FF0Fh
  84.     dd    0000FFF0Fh,0F00FFF0Fh,00F0FFF0Fh,0FF0FFF0Fh
  85.     dd    000FFFF0Fh,0F0FFFF0Fh,00FFFFF0Fh,0FFFFFF0Fh
  86.     dd    0000000FFh,0F00000FFh,00F0000FFh,0FF0000FFh
  87.     dd    000F000FFh,0F0F000FFh,00FF000FFh,0FFF000FFh
  88.     dd    0000F00FFh,0F00F00FFh,00F0F00FFh,0FF0F00FFh
  89.     dd    000FF00FFh,0F0FF00FFh,00FFF00FFh,0FFFF00FFh
  90.     dd    00000F0FFh,0F000F0FFh,00F00F0FFh,0FF00F0FFh
  91.     dd    000F0F0FFh,0F0F0F0FFh,00FF0F0FFh,0FFF0F0FFh
  92.     dd    0000FF0FFh,0F00FF0FFh,00F0FF0FFh,0FF0FF0FFh
  93.     dd    000FFF0FFh,0F0FFF0FFh,00FFFF0FFh,0FFFFF0FFh
  94.     dd    000000FFFh,0F0000FFFh,00F000FFFh,0FF000FFFh
  95.     dd    000F00FFFh,0F0F00FFFh,00FF00FFFh,0FFF00FFFh
  96.     dd    0000F0FFFh,0F00F0FFFh,00F0F0FFFh,0FF0F0FFFh
  97.     dd    000FF0FFFh,0F0FF0FFFh,00FFF0FFFh,0FFFF0FFFh
  98.     dd    00000FFFFh,0F000FFFFh,00F00FFFFh,0FF00FFFFh
  99.     dd    000F0FFFFh,0F0F0FFFFh,00FF0FFFFh,0FFF0FFFFh
  100.     dd    0000FFFFFh,0F00FFFFFh,00F0FFFFFh,0FF0FFFFFh
  101.     dd    000FFFFFFh,0F0FFFFFFh,00FFFFFFFh,0FFFFFFFFh
  102. bitptn    ends
  103.  
  104. VRAM    segment 'CODE'
  105.     assume  cs:VRAM
  106. ;***********************************
  107. ;    Write ANK code
  108. ;***********************************
  109.            public    wrtank
  110. wrtank    proc    near
  111.     push    ebp
  112.     mov        ebp,esp
  113.     push       esi
  114.     push       edi
  115.     push    ebx
  116.     push    es
  117.     push    fs
  118.  
  119.     mov    edi,[ebp].v_y
  120.     shl    edi,13
  121.     mov    eax,[ebp].v_x
  122.     shl    eax,2
  123.     add    edi,eax
  124.     and    edi,07FFFFh
  125.     add    edi,[ebp].v_off
  126.  
  127.     mov    eax,[ebp].v_ccol
  128.     and    eax,0fh
  129.     mov    eax,ds:[eax*4+offset colptn]
  130.     mov    [ebp].v_ccol,eax
  131.     mov    eax,[ebp].v_bcol
  132.     and    eax,0fh
  133.     mov    eax,ds:[eax*4+offset colptn]
  134.     mov    [ebp].v_bcol,eax
  135.  
  136.     mov    ax,138h
  137.     mov    es,ax
  138.     mov    ax,word ptr [vramSeg]
  139.     mov    fs,ax
  140.  
  141.     mov    esi,[ebp].v_ch
  142.     and    esi,0ffh
  143.     shl    esi,4
  144.     add    esi,3D800h
  145.  
  146.     mov    ecx,16
  147. wrtak2:    movzx    eax,byte ptr es:[esi]
  148.     inc    esi
  149.     mov    eax,ds:[eax*4+offset fntptn]
  150.     mov    ebx,eax
  151.     not    ebx
  152.     and    eax,[ebp].v_ccol
  153.     and    ebx,[ebp].v_bcol
  154.     or    eax,ebx
  155.     mov    fs:[edi],eax
  156.     add    edi,512
  157.     and    edi,07FFFFh
  158.     add    edi,[ebp].v_off
  159.     loop    wrtak2
  160.  
  161.     pop    fs
  162.     pop    es
  163.     pop    ebx
  164.     pop        edi
  165.     pop        esi
  166.     pop    ebp
  167.     ret
  168. wrtank    endp
  169.  
  170. ;***********************************
  171. ;*     VRAM Scrool
  172. ;***********************************
  173.            public    vramroll
  174. vramroll proc    near
  175.     push    esi
  176.     push    edi
  177.     push    ds
  178.     push    es
  179.  
  180.     mov    eax,dword ptr [vramSeg]
  181.     mov    es,ax
  182.     mov    ds,ax
  183.  
  184.     mov    esi,512*16
  185.     mov    edi,0
  186.     cld
  187.     mov    ax,16*24
  188. vramlp:    mov    ecx,512/4
  189.     rep movsd
  190.     dec    ax
  191.     jnz    vramlp
  192.  
  193.     mov    ecx,512*16/4
  194.     mov    eax,0
  195.     rep stosd
  196.  
  197.     pop    es
  198.     pop    ds
  199.     pop    edi
  200.     pop    esi
  201.     ret
  202. vramroll endp
  203. ;********************************
  204. ;*    VRAM Clraer
  205. ;********************************
  206.            public    vramcls
  207. vramcls proc    near
  208.     push    ebp
  209.     mov        ebp,esp
  210.     push    edx
  211.     push    esi
  212.     push    edi
  213.     push    ds
  214.     push    es
  215.  
  216.     mov    edi,[ebp+8]
  217.     shl    edi,13
  218.     and    edi,07FFFFh
  219.     add    edi,[ebp+16]
  220.  
  221.     cld
  222.     mov    eax,[ebp+12]
  223.     and    eax,0fh
  224.     mov    eax,ds:[eax*4+offset colptn]
  225.  
  226.     mov    dx,word ptr [vramSeg]
  227.     mov    es,dx
  228.     mov    ds,dx
  229.  
  230.     mov    dx,16
  231. vramcl:    mov    ecx,512/4
  232.     rep stosd
  233.     and    edi,07FFFFh
  234.     add    edi,[ebp+16]
  235.     dec    dx
  236.     jnz    vramcl
  237.  
  238.     pop    es
  239.     pop    ds
  240.     pop    edi
  241.     pop    esi
  242.     pop    edx
  243.     pop    ebp
  244.     ret
  245. vramcls endp
  246. ;***********************************
  247. ;    Displry CurSol
  248. ;***********************************
  249.            public    colset
  250. colset    proc    near
  251.     push    ebp
  252.     mov        ebp,esp
  253.     push       edi
  254.  
  255.     cld
  256.     mov    edi,[ebp+8]
  257.     mov    eax,[ebp+12]
  258.     mov    ecx,[ebp+16]
  259.     shr    ecx,1
  260.     rep stosw
  261.  
  262.     pop        edi
  263.     pop    ebp
  264.     ret
  265. colset    endp
  266. ;***********************************
  267. ;    Soft Timer
  268. ;***********************************
  269.            public    Soft_Timer
  270. Soft_Timer proc    near
  271.     mov    cx,[esp+4]
  272.     int    0FDh
  273.     ret
  274. Soft_Timer endp
  275. ;***********************************
  276. ;    Printer BIOS
  277. ;***********************************
  278.            public    PRB_chr
  279. PRB_chr proc    near
  280.     mov    ax,0100h
  281.     mov    dl,[esp+4]
  282.     int    94h
  283.     mov    al,ah
  284.     and    eax,0FFh
  285.     ret
  286. PRB_chr endp
  287.  
  288. ;**********************************************
  289. ;    漢字コ-ドチェックテ-ブル
  290. ;**********************************************
  291. ISKAN1    equ    1
  292. ISKAN2    equ    2
  293. ;        0 1 2 3 4 5 6 7 8 9 A B C D E F
  294. kantbl    db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;0
  295.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;1
  296.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;2
  297.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;3
  298.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;4
  299.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;5
  300.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;6
  301.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0    ;7
  302.     db    2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;8
  303.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;9
  304.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;A
  305.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;B
  306.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;C
  307.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;D
  308.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;E
  309.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0    ;F
  310.  
  311. ;**************************************************
  312. ;void   wrtstr(char *str, int x, int y, int cl)
  313. ;           +8    +12    +16    +20
  314. ;**************************************************
  315.     public  wrtstr
  316. wrtstr    proc    near
  317.     push    ebp
  318.     mov    ebp,esp
  319.     sub    esp,8
  320.     push    ebx
  321.     push    esi
  322.     push    edi
  323.  
  324.     mov    eax,[ebp+20]
  325.     test    al,16
  326.     je    BakCol
  327.     and    eax,15
  328.     mov    [ebp-8],eax        ; bc
  329.     mov    dword ptr [ebp-4],0    ; fc
  330.     jmp    WrtSt1
  331.  
  332. BakCol:    and    eax,0Fh
  333.     mov    [ebp-4],eax        ; fc
  334.     mov    dword ptr [ebp-8],0    ; bc
  335.  
  336. WrtSt1:    mov    eax,[ebp+12]        ; x
  337.     lea    edi,[eax+eax]
  338.     mov    eax,[ebp+16]        ; y
  339.     shl    eax,8
  340.     add    edi,eax
  341.     add    edi,[dmy_vram]
  342.  
  343.     mov    esi,[ebp+8]        ; *str
  344. WrtStLp:
  345.     movzx    eax,byte ptr [esi]
  346.     inc    esi
  347.     and    al,al
  348.     jnz    WrtSt2
  349.  
  350.     pop    edi
  351.     pop    esi
  352.     pop    ebx
  353.     leave
  354.     ret
  355.  
  356. WrtSt2:
  357.     mov    bl,[eax+offset kantbl]
  358.     and    bl,ISKAN1
  359.     jz    NonKan
  360.     movzx    ebx,byte ptr [esi]
  361.     mov    bh,[ebx+offset kantbl]
  362.     and    bh,ISKAN2
  363.     jz    NonKan
  364.     mov    bh,al
  365.     inc    si
  366.  
  367.     push    0
  368.     push    dword ptr [ebp-8]
  369.     push    dword ptr [ebp-4]
  370.     push    dword ptr [ebp+16]
  371.     push    dword ptr [ebp+12]
  372.     push    ebx
  373.     call    wrtkan
  374.     add    esp,6*4
  375.  
  376.     mov    al,[ebp+20]
  377.     or    al,40h
  378.     mov    ah,bh
  379.     mov    [edi],ax
  380.     add    edi,2
  381.  
  382.     mov    al,[ebp+20]
  383.     or    al,80h
  384.     mov    ah,bl
  385.     mov    [edi],ax
  386.     add    edi,2
  387.  
  388.     add    dword ptr [ebp+12],2
  389.     jmp    WrtStNt
  390.  
  391. NonKan:
  392.     cmp    al,1Bh
  393.     je    WrtStNt
  394.  
  395.     mov    ebx,eax
  396.     push    0
  397.     push    dword ptr [ebp-8]
  398.     push    dword ptr [ebp-4]
  399.     push    dword ptr [ebp+16]
  400.     push    dword ptr [ebp+12]
  401.     push    ebx
  402.     call    wrtank
  403.     add    esp,6*4
  404.  
  405.     mov    al,[ebp+20]
  406.     mov    ah,bl
  407.     mov    [edi],ax
  408.     add    edi,2
  409.     inc    dword ptr [ebp+12]
  410.  
  411. WrtStNt:
  412.     cmp    dword ptr [ebp+12],DMAX_X
  413.     jl    WrtStLp
  414.     inc    dword ptr [ebp+16]
  415.     mov    dword ptr [ebp+12],0
  416.     jmp    WrtStLp
  417.  
  418. wrtstr    endp
  419.  
  420. ;******************************************
  421. ;void    Dsp_vram(char *vp)
  422. ;               +8
  423. ;******************************************
  424.     public    Dsp_vram
  425. Dsp_vram proc    near
  426.     push    ebp
  427.     mov    ebp,esp
  428.     sub    esp,16
  429.     push    ebx
  430.     push    esi
  431.     push    edi
  432.  
  433.     mov    edi,[dmy_vram]
  434.     add    edi,512
  435.     mov    esi,[ebp+8]
  436.  
  437.     mov    dword ptr [ebp-4],0        ; y = 0
  438. DspYLop:
  439.     mov    ecx,0
  440. DspXLop:
  441.     mov    ax,[esi]        ; *vp
  442.     cmp    ax,[edi]        ; *mp
  443.     je    DspXNxt
  444.  
  445.     cmp    ecx,0
  446.     je    DspNxt1
  447.     test    al,80h
  448.     jz    DspNxt1
  449.     mov    bx,[esi-2]
  450.     test    bl,40h
  451.     jz    DspNxt1
  452.  
  453.     dec    ecx
  454.     sub    esi,2
  455.     sub    edi,2
  456.  
  457. DspNxt1:
  458.     movzx    eax,byte ptr [esi]
  459.     test    al,10h
  460.     je    DspNxt2
  461.     and    al,0Fh
  462.     mov    [ebp-16],eax
  463.     mov    dword ptr [ebp-12],0
  464.     jmp    DspNxt3
  465.  
  466. DspNxt2:
  467.     and    al,0Fh
  468.     mov    [ebp-12],eax
  469.     mov    dword ptr [ebp-16],0
  470.  
  471. DspNxt3:
  472.     mov    eax,[esi]
  473.     and    eax,00800040h
  474.     cmp    eax,00800040h
  475.     jne    DspNxt4
  476.  
  477.     push    ecx
  478.     push    0
  479.     push    dword ptr [ebp-16]
  480.     push    dword ptr [ebp-12]
  481.     mov    eax,[ebp-4]
  482.     add    eax,2
  483.     push    eax
  484.     push    ecx
  485.     movzx    eax,byte ptr [esi+3]
  486.     mov    ah,byte ptr [esi+1]
  487.     push    eax
  488.     call    wrtkan
  489.     add    esp,6*4
  490.     pop    ecx
  491.  
  492.     mov    eax,[esi]
  493.     mov    [edi],eax
  494.     jmp    DspXNxt
  495.  
  496. DspNxt4:
  497.     push    ecx
  498.     push    0
  499.     push    dword ptr [ebp-16]
  500.     push    dword ptr [ebp-12]
  501.     mov    eax,[ebp-4]
  502.     add    eax,2
  503.     push    eax
  504.     push    ecx
  505.     mov    al,[esi]
  506.     and    al,0C0h
  507.     jz    DspNxt5
  508.     mov    eax,0FEh
  509.     jmp    DspNxt6
  510. DspNxt5:
  511.     movzx    eax,byte ptr [esi+1]
  512. DspNxt6:
  513.     push    eax
  514.     call    wrtank
  515.     add    esp,6*4
  516.     pop    ecx
  517.  
  518.     mov    ax,[esi]
  519.     mov    [edi],ax
  520.  
  521. DspXNxt:
  522.     add    esi,2
  523.     add    edi,2
  524.     inc    ecx
  525.     cmp    ecx,DMAX_X
  526.     jne    DspXLop
  527.  
  528.     inc    dword ptr [ebp-4]
  529.     mov    eax,[ebp-4]
  530.     cmp    eax,MAX_SCR
  531.     jne    DspYLop
  532.  
  533.     mov    word ptr ReWrt_flg,-1
  534.     call   locate
  535.  
  536.     pop    edi
  537.     pop    esi
  538.     pop    ebx
  539.     leave
  540.     ret
  541.  
  542. Dsp_vram endp
  543.  
  544. VRAM    ends
  545.     end
  546.